package edu.cuit.avatar;

import java.util.ArrayList;
import java.util.function.Consumer;

/**
 * 方法引用:lambda表达式的简写形式
 *     种类           示例                      说明                                          对应的λ表达式
 * 静态方法引用     类名::静态方法   函数式接口中被实现的方法的全部参数传递给该方法作为参数         (a,b,...) -> 类名.静态方法(a,b,...)
 * 实例方法引用     对象::实例方法   函数式接口中被实现的方法的全部参数传递给该方法作为参数         (a,b,...) -> 对象.实例方法(a,b,...)
 * 某类实例方法     类名::实例方法   函数式接口中被实现的方法的第一个参数作为调用者，              (a,b,...) -> a.实例方法(b,...)
 *                                 后面的参数传递给该方法作为参数
 * 构造方法引用     类名::new       函数式接口中被实现的方法的全部参数传递给该方法作为参数         (a,b,..) -> new 类名(a,b,...)
 * @author <a href="mailto:1020zhaodan@163.com">Adan</a>
 * @version 1.0
 * @date 2025/7/11 9:37
 */
public class MethodReference {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("peppa");
        list.add("suzy");
        list.add("emily");
        list.add("jorge");
        list.add("emily");
        System.out.println("====================匿名内部类===========================");
        //匿名内部类
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        System.out.println("====================lambda表达式===========================");
        list.forEach(e -> System.out.println(e));
        System.out.println("====================方法引用===========================");
        list.forEach(System.out::println);
    }
}
